﻿using System;
using System.Web.Mvc;

namespace LAPI.Web.Controllers.DeportesPista
{
    /// <summary>
    /// Controlador para /DeportesPista/
    /// </summary>
    public class DeportesPistaController : BaseController
    {

        #region /DeportesPista/Gestion
        /// <summary>
        /// GET: /DeportesPista/Gestion
        /// </summary>
        /// <param name="Id">Identificador de la pista que estamos administrando</param>
        /// <returns>View Gestion.cshtml</returns>
        [HttpGet]
        public ActionResult Gestion(Int32 id)
        {
            ActionResult resultado = comprobarErrorPermisoAdminPista();
            if (resultado == null)
            {
                LAPI.Business.Gestores.GestorDeportesPista gestor = new Business.Gestores.GestorDeportesPista();

                LAPI.Business.DatosSesion datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];
                ViewData["IdPista"] = id;
                return View(gestor.ObtenerTodos(IdPista: id, IdCentroDeportivo: datosSesion.getIdCentroDeportivo()));
            }

            return resultado;
        }
        #endregion

        #region /DeportesPista/Editar

        /// <summary>
        /// GET: /DeportesPista/Editar
        /// </summary>
        /// <param name="id">Identificador único del deporte para la pista</param>
        /// <returns>View Editar.cshtml</returns>
        [HttpGet]
        public ActionResult Editar(Int32 id)
        {
            ActionResult resultado = comprobarErrorPermisoAdminPista();
            if (resultado == null && id != 0)
            {
                LAPI.Business.Gestores.GestorDeportesPista gestor = new Business.Gestores.GestorDeportesPista();
                return View(gestor.ObtenerPorID(IdDeportePista: id));
            }

            return resultado;
        }

        /// <summary>
        /// POST: /DeportesPista/Editar
        /// </summary>
        /// <param name="model">modelo de DeportePista</param>
        /// <returns>String con el resultado JSON de la operacion</returns>
        [HttpPost]
        public String Editar(LAPI.Data.Model.DeportePista model)
        {
            LAPI.Business.Acciones.ResultadoAccion resultado = null;

            //0. Comprobamos que haya sesión
            resultado = comprobarPermisoAdminPista();
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            //1. Validamos que podamos realizar el cambio            
            LAPI.Business.Acciones.AccValidarDatosEditarDeportePista validacion = new Business.Acciones.AccValidarDatosEditarDeportePista();
            resultado = validacion.ValidarDatosEditarDeportePista(datosDeportePista: model);
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            //2. Modificamos los datos
            LAPI.Business.Acciones.AccEditarDeportePista modificar = new Business.Acciones.AccEditarDeportePista();
            resultado = modificar.EditarDeportePista(datosDeportePista: model);
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }          

            //3. Todo ha ido bien, redirigimos a la vista de gestion
            resultado = new Business.Acciones.ResultadoAccion();
            resultado.setResultado(Business.Acciones.TipoResultado.REDIRECCION);
            resultado.addMensaje(
                mensaje: Url.Action(actionName: "Gestion", controllerName: "DeportesPista", routeValues: new { id = model.idPista }),
                tipoMensaje: Business.Acciones.TipoMensaje.REDIRECCION
            );

            return resultado.ResultadoToJson();
        }
        #endregion

        #region /DeportesPista/Crear

        /// <summary>
        /// GET: /DeportesPista/Crear
        /// </summary>
        /// <param name="Id">Identificador único de la pista que estamos administrando</param>
        /// <returns>View Crear.cshtml</returns>
        [HttpGet]
        public ActionResult Crear(Int32 Id)
        {
            ActionResult resultado = comprobarErrorPermisoAdminPista();
            if (resultado == null)                 
            {
                LAPI.Business.DatosSesion datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];
                LAPI.Data.Model.Pista modelPista = new Data.Model.Pista();
                modelPista.idPista = Id;
                modelPista.idCentroDeportivo = datosSesion.getIdCentroDeportivo();
                
                LAPI.Business.Acciones.AccGetLuzPista getter = new Business.Acciones.AccGetLuzPista();
                Boolean luz = getter.GetLuzPista(datosPista: modelPista);

                LAPI.Data.Model.DeportePista model = new Data.Model.DeportePista();
                model.idPista = Id;
                model.luz = luz;

                return View(model);
            }

            return resultado;
        }

        /// <summary>
        /// POST: /DeportesPista/Crear
        /// </summary>
        /// <param name="model">modelo de DeportePista</param>
        /// <returns>String con el resultado JSON de la operacion</returns>
        [HttpPost]
        public String Crear(LAPI.Data.Model.DeportePista model)
        {
            LAPI.Business.Acciones.ResultadoAccion resultado = null;

            //0. Comprobamos que haya sesión
            resultado = comprobarPermisoAdminPista();
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            //1. Validamos que podamos crear
            LAPI.Business.Acciones.AccValidarDatosCrearDeportePista validacion = new Business.Acciones.AccValidarDatosCrearDeportePista();
            resultado = validacion.ValidarDatosCrearDeportePista(datosDeportePista: model);
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            //2. Creamos
            LAPI.Business.Acciones.AccCrearDeportePista crear = new Business.Acciones.AccCrearDeportePista();
            resultado = crear.CrearDeportePista(datosDeportePista: model);
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            //3. Todo ha ido bien, redirigimos a la vista de gestion
            resultado = new Business.Acciones.ResultadoAccion();
            resultado.setResultado(Business.Acciones.TipoResultado.REDIRECCION);
            resultado.addMensaje(
                mensaje: Url.Action(actionName: "Gestion", controllerName: "DeportesPista", routeValues: new { id = model.idPista }),
                tipoMensaje: Business.Acciones.TipoMensaje.REDIRECCION
            );

            return resultado.ResultadoToJson();
        }
        #endregion

        #region /DeportesPista/Activar y /DeportesPista/Desactivar

        /// <summary>
        /// GET: /DeportesPista/Activar
        /// </summary>
        /// <param name="id">identificador único del deporte para pista</param>
        /// <returns>String con el resultado JSON</returns>
        [HttpGet]
        public String Activar(Int32 id)
        {
            LAPI.Business.Acciones.ResultadoAccion resultado = null;

            //0. Comprobamos que haya sesión
            resultado = comprobarPermisoAdminPista();
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            //1. Activamos
            LAPI.Business.Acciones.AccEstadoDeportePista activar = new LAPI.Business.Acciones.AccEstadoDeportePista();
            LAPI.Data.Model.DeportePista model = new LAPI.Data.Model.DeportePista();
            model.activo = true;
            model.idDeportePista = id;
            resultado = activar.ActivarDeportePista(datosDeportePista: model);
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            return resultado.ResultadoToJson();
        }

        /// <summary>
        /// GET: /DeportesPista/Desactivar
        /// </summary>
        /// <param name="id">identificador único del deporte para pista</param>
        /// <returns>String con el resultado JSON</returns>
        [HttpGet]
        public String Desactivar(Int32 id)
        {
            LAPI.Business.Acciones.ResultadoAccion resultado = null;

            //0. Comprobamos que haya sesión
            resultado = comprobarPermisoAdminPista();
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            //1. Desactivamos
            LAPI.Business.Acciones.AccEstadoDeportePista desactivar = new LAPI.Business.Acciones.AccEstadoDeportePista();
            LAPI.Data.Model.DeportePista model = new LAPI.Data.Model.DeportePista();
            model.activo = false;
            model.idDeportePista = id;
            resultado = desactivar.DesactivarDeportePista(datosDeportePista: model);
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //informamos del error
                return resultado.ResultadoToJson();
            }

            return resultado.ResultadoToJson();
        }

        #endregion

        #region Filtros Búsqueda

        /// <summary>
        /// POST: /DeportesPista/Buscar
        /// </summary>
        /// <param name="id">Filtro por identificador de pista</param>
        /// <returns>_ListadoDeportesPista.cshtml</returns>
        [HttpPost]
        public ActionResult Buscar(String id)
        {

            ActionResult resultado = comprobarErrorPermisoAdminPista();
            if (resultado == null)
            {
                LAPI.Business.Gestores.GestorDeportesPista gestor = new Business.Gestores.GestorDeportesPista();

                LAPI.Business.DatosSesion datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];

                //Creamos el filtro con los parametros posibles                
                return PartialView("_ListadoDeportesPista", gestor.ObtenerTodos(IdCentroDeportivo: datosSesion.getIdCentroDeportivo(), IdPista: Convert.ToInt32(id)) );
            }

            return resultado;            
        }

        #endregion
    }
}
